package com.wg.db;

import com.wg.db.ds.DataSourceMgr;
import com.wg.db.redis.RedisMgr;

/**
 * 数据源管理服务
 * <p>
 * 职责：
 * - 统一管理数据源（关系型数据库、Redis等）的初始化与关闭
 * - 协调异步写线程池的生命周期（与数据源绑定）
 * - 提供线程安全的单例访问接口
 *
 * @author 少爷123
 */
public class DataService {
    private DataService() {
    }

    public static DataService getInstance() {
        return Singleton.INSTANCE.getService();
    }

    /**
     * 初始化数据服务（应用启动时调用）
     * <p>
     * 初始化顺序：
     * 1. 初始化数据源管理器（加载数据库连接配置）
     * 2. 若存在有效数据源，初始化异步写线程池（用于批量写操作）
     * 3. 初始化Redis管理器（加载缓存配置）
     */
    public void init() {
        DataSourceMgr.getInstance().init();
        if (!DataSourceMgr.getInstance().isEmpty()) {
            AsynWriteThreadPool.getInstance().init();
        }

        RedisMgr.getInstance().init();
    }

    /**
     * 关闭数据服务（应用停止时调用）
     */
    public void shutdown() {
        if (!DataSourceMgr.getInstance().isEmpty()) {
            AsynWriteThreadPool.getInstance().shutdown();
        }
    }

    private enum Singleton {
        INSTANCE;
        private final DataService service;

        Singleton() {
            this.service = new DataService();
        }

        public DataService getService() {
            return service;
        }
    }
}
